function generateParenthesis(n) {
    var result = [];
    var _generate = function (left, right, max, s) {
        // terminator 终结条件
        if (left === max && right === max) {
            console.log(s);
            result.push(s);
            return;
        }
        // process 业务处理
        // 当前这一层加左括号或则右括号
        // 判断括号是否合法
        // 左括号 添加之前，数量不超标（不大于n）。
        // 右括号 添加之前，左括号的个数大于右括号个数
        // drill down 进入下一层
        // level +1 ； max不变， 
        if (left < max) {
            _generate(left + 1, right, max, s + '(');
        }
        if (left > right) {
            _generate(left, right + 1, max, s + ')');
        }
        // reverse state 清除当前层造成的状态
    };
    _generate(0, 0, n, '');
    return result;
}
;
console.log(generateParenthesis(3));
